﻿using sipfe.Controllers.Base;
using sipfe.model.dataAccess;
using sipfe.service.file;
using sipfe.util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc;

namespace sipfe.Areas.File.Controllers
{
    public class FileUploadController : BaseSipfeController
    {
         public ActionResult Index()
        {
            return View();
        }

         [HttpPost]
         public ActionResult uploadFile1(SIPDetArchivo sipDetArchivo)
         {
             if (ModelState.IsValid)
             {
                 FileUploadService fileUploadService = new FileUploadService();
             }
             return View();
         }


         [HttpPost]
         public HtmlString uploadFile(SIPDetArchivo sipDetArchivo)
         {
             if (ModelState.IsValid)
             {
                 HttpFileCollectionBase uploads = Request.Files;
                 int sizeFile = uploads.Count;
                 if (sizeFile > 0)
                 {
                     FileUploadController fileUploadController = new FileUploadController();
                     SIPDetArchivo sipDetArchivoAux = new SIPDetArchivo();
                     string idCampoFile = "idAdjunto";
                     string v_Comentario = sipDetArchivo.vComentario;
                     int n_IdeUsuReg = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
                     HttpPostedFileBase file = Request.Files[idCampoFile];
                     sipDetArchivoAux = getSIPDetArchivo(file, idCampoFile, Constante.N_TIPO_ADJUNTO_PASO, v_Comentario, n_IdeUsuReg);
                     sipDetArchivoAux.nIdeSol = sipDetArchivo.nIdeSol;
                     sipDetArchivoAux.nSeqPaso = sipDetArchivo.nSeqPaso;

                     FileUploadService fileUploadService = new FileUploadService();
                     string rpta= fileUploadService.uploadFileService(sipDetArchivoAux);

                     StringBuilder rpta1 = new StringBuilder("window.opener.parent.document.getElementById('imgPaper').click();");
                     rpta1.Append("window.close();");
                     var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta1));
                     return (HtmlString)rptax;
                     
                 }
             }
             return null;
            
         }

         /*
         $mensaje.="window.opener.parent.document.getElementById('imgPaper').click();";
          * StringBuilder rpta = new StringBuilder("alert('El Proceso se Realizo Correctamente');");
            rpta.Append("window.opener.parent.document.getElementById('apePaterno').value='"+vPrimApellido+"';");
            rpta.Append("window.opener.parent.document.getElementById('apeMaterno').value='" + vSegApellido+"';");
            rpta.Append("window.opener.parent.document.getElementById('btnBuscar').click();");
            rpta.Append("window.close();");
            var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta));
            return (HtmlString)rptax;
          * 
          * 
        @Html.HiddenFor(model => model.nIdeSol, new { Value = @ViewBag.nIdeSol }) 
        @Html.HiddenFor(model => model.nSeqPaso, new { Value = @ViewBag.nSeqPaso })



 
 [nIdeSol] numeric(10, 0) NOT NULL,
 [nSeqPaso] numeric(4, 0) NOT NULL,



 

         */

         [HttpPost]
         public void uploadFileold(SIPDetArchivo sipDetArchivo)
         {
             HttpFileCollectionBase uploads = Request.Files;
             List<HttpPostedFileBase> files = new List<HttpPostedFileBase>();
             int sizeFile = uploads.Count;
             String idCampoFile = "idAdjunto";
             String nameFile = "";
             long pLength = 0;

             if (sizeFile > 0)
             {
                 HttpPostedFileBase file = Request.Files[idCampoFile];
                 pLength = file.InputStream.Length;

                 if (pLength > 0)
                 {
                     nameFile = file.FileName;
                     int ind1 = 0;
                     int longitud = 0;
                     int tamanioCad = nameFile.Length;
                     Boolean corchete = nameFile.Contains("\\");
                     if (corchete)
                     {
                         ind1 = nameFile.LastIndexOf("\\");
                         longitud = tamanioCad - ind1 - 1;
                         nameFile = nameFile.Substring(ind1 + 1, longitud);
                     }
                     // byte[] getBytes =   GetBytes(file);
                    // BandejaService bandejaService = new BandejaService();
                     //bandejaService.insertaArchivosService(GetBytes(file), n_IdeSol, nextPaso, nameFile);
                 }
             }
         }

         public SIPDetArchivo getSIPDetArchivo(HttpPostedFileBase file, String idCampoFile, int n_IdeTipoAdj, string v_Comentario, int n_IdeUsuReg)
         {
             SIPDetArchivo sipDetArchivo    =   new SIPDetArchivo();
             long pLength = file.InputStream.Length;
             string nombreFile              =   "";
             string v_ContenType            =   "";             

             if (pLength > 0)
             {
                 nombreFile         =   file.FileName;
                 int ind1           =   0;
                 int longitud       =   0;
                 int tamanioCad     =   nombreFile.Length;
                 Boolean corchete   =   nombreFile.Contains("\\");
                 if (corchete)
                 {
                     ind1       =   nombreFile.LastIndexOf("\\");
                     longitud   =   tamanioCad - ind1 - 1;
                     nombreFile =   nombreFile.Substring(ind1 + 1, longitud);
                 }
                 int punto          = nombreFile.IndexOf(".") + 1;
                 int tamanio        = nombreFile.Length;
                 String extension   = nombreFile.Substring(punto, tamanio - punto);

                 if(extension.Equals("pdf")){
                     v_ContenType = Constante.CONTENT_TYPE.pdf;
                 }
                 else if (extension.Equals("jpg"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.jpg;
                 }
                 else if (extension.Equals("doc") || extension.Equals("docx"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.doc;
                 }
                 else if (extension.Equals("xls") || extension.Equals("xlsx"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.xls;
                 }
                 sipDetArchivo.vNomAdj      =   nombreFile;
                 sipDetArchivo.nIdeTipoAdj  =   n_IdeTipoAdj;
                 sipDetArchivo.vContenType  =   v_ContenType;
                 sipDetArchivo.vComentario  =   v_Comentario;
                 sipDetArchivo.imArchivoAdj =   GetBytes(file);
                 sipDetArchivo.dtFecReg     =   DateTime.Now;
                 sipDetArchivo.vFirma       =   extension;
                 sipDetArchivo.nIdeUsuReg   =   n_IdeUsuReg;
                 sipDetArchivo.vExtension   =   extension;
                 return sipDetArchivo;
             }
             return null;
         }

         private static byte[] GetBytes(HttpPostedFileBase file)
         {
             BinaryReader b = new BinaryReader(file.InputStream);
             return b.ReadBytes(file.ContentLength);
         }

         public void readFileById(decimal nIdArchivo)
         {
             FileUploadService fileUploadService    =   new FileUploadService();
             SIPDetArchivo sipDetArchivo            =   new SIPDetArchivo();
             sipDetArchivo = fileUploadService.readFileByIdService(nIdArchivo);

             long dataLengthToRead  =   sipDetArchivo.imArchivoAdj.Length;
             int blockSize          =   dataLengthToRead >= 5000 ? 5000 : (int)dataLengthToRead;
             byte[] byteImage       =   new byte[dataLengthToRead];
             byteImage              =   (byte[])sipDetArchivo.imArchivoAdj;

             Response.ContentType = sipDetArchivo.vContenType;
             Response.Clear();
             Response.ClearContent();
             Response.ClearHeaders();
             Response.BufferOutput = true;
             Response.AddHeader("Content-Disposition", "attachment; filename=" + sipDetArchivo.vNomAdj);
             Response.Charset = "UTF-8";
             Response.Expires = 0;
             Response.Buffer = true;
             Response.BinaryWrite(byteImage);
             Response.End();
         }

         public void readFilePersonaById(decimal nIdArchivo)
         {
             FileUploadService fileUploadService = new FileUploadService();
             SIPDetArchivoPersona sipDetArchivo = new SIPDetArchivoPersona();
             sipDetArchivo = fileUploadService.readFilePersonaByIdService(nIdArchivo);

             long dataLengthToRead = sipDetArchivo.imgAdjunto.Length;
             int blockSize = dataLengthToRead >= 5000 ? 5000 : (int)dataLengthToRead;
             byte[] byteImage = new byte[dataLengthToRead];
             byteImage = (byte[])sipDetArchivo.imgAdjunto;

             Response.ContentType = sipDetArchivo.vContenType;
             Response.Clear();
             Response.ClearContent();
             Response.ClearHeaders();
             Response.BufferOutput = true;
             Response.AddHeader("Content-Disposition", "attachment; filename=" + sipDetArchivo.vNomAdj);
             Response.Charset = "UTF-8";
             Response.Expires = 0;
             Response.Buffer = true;
             Response.BinaryWrite(byteImage);
             Response.End();
         }

         public ViewResult ListaSoloArchivos(int nIdeSol)
         {
             FileUploadService fileUploadService = new FileUploadService();
             return View(fileUploadService.ListaSoloArchivosService(nIdeSol));
         }

         public ViewResult ListarAdjuntosPaso(int nIdeSol, int nSeqPaso)
         {
             FileUploadService fileUploadService = new FileUploadService();
             return View(fileUploadService.ListarAdjuntosPasoService(nIdeSol, nSeqPaso));
         }


         public ViewResult AddFilePersonaInp(int nIdePersona)
         {
             ViewBag.nIdePersona = nIdePersona;
             ViewBag.TipoAdjunto = formaSelectCompendioLargo(Constante.getInstance().N_IDE_TABLA_TIPO_ADJUNTO);
             return View();
         }

         [HttpPost]
         public HtmlString AddFilePersonaInp(SIPDetArchivoPersona sipDetArchivo)
         {
             if (ModelState.IsValid)
             {
                 HttpFileCollectionBase uploads = Request.Files;
                 int sizeFile = uploads.Count;
                 if (sizeFile > 0)
                 {
                     FileUploadController fileUploadController = new FileUploadController();
                     SIPDetArchivoPersona sipDetArchivoAux = new SIPDetArchivoPersona();
                     string idCampoFile = "idAdjunto";
                     int n_IdeUsuReg = Int32.Parse(Session[Constante.N_IDE_USUARIO].ToString());
                     HttpPostedFileBase file = Request.Files[idCampoFile];
                     int n_IdeTipoArchivo = Int32.Parse(sipDetArchivo.nIdeTipoArchivo.ToString());
                     string v_Descr = sipDetArchivo.vDescr;
                     int n_IdePersona = Int32.Parse(sipDetArchivo.nIdePersona.ToString());

                     sipDetArchivoAux = getSIPDetArchivoPersona(file, n_IdeTipoArchivo, v_Descr, n_IdeUsuReg, n_IdePersona);
                     FileUploadService fileUploadService = new FileUploadService();
                     string rpta = fileUploadService.uploadFilePersonaService(sipDetArchivoAux);

                     StringBuilder rpta1 = new StringBuilder("window.opener.parent.document.getElementById('imgPaper').click();");
                     rpta1.Append("window.close();");
                     var rptax = new HtmlString(string.Format("<script language='javascript' type='text/javascript'>{0}</script>", rpta1));
                     return (HtmlString)rptax;

                 }
             }
             return null;

         }

         public SIPDetArchivoPersona getSIPDetArchivoPersona(HttpPostedFileBase file, int n_IdeTipoArchivo, string v_Descr, int n_IdeUsuReg, int n_IdePersona)
         {
             SIPDetArchivoPersona sipDetArchivo = new SIPDetArchivoPersona();
             long pLength = file.InputStream.Length;
             string nombreFile = "";
             string v_ContenType = "";
             DateTime hoy = UtilitariosUtil.FechaHoy();

             if (pLength > 0)
             {
                 nombreFile = file.FileName;
                 int ind1 = 0;
                 int longitud = 0;
                 int tamanioCad = nombreFile.Length;
                 Boolean corchete = nombreFile.Contains("\\");
                 if (corchete)
                 {
                     ind1 = nombreFile.LastIndexOf("\\");
                     longitud = tamanioCad - ind1 - 1;
                     nombreFile = nombreFile.Substring(ind1 + 1, longitud);
                 }
                 int punto = nombreFile.IndexOf(".") + 1;
                 int tamanio = nombreFile.Length;
                 String extension = nombreFile.Substring(punto, tamanio - punto);
                 extension  =   extension.ToLower();

                 if (extension.Equals("pdf"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.pdf;
                 }
                 else if (extension.Equals("jpg"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.jpg;
                 }
                 else if (extension.Equals("doc") || extension.Equals("docx"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.doc;
                 }
                 else if (extension.Equals("xls") || extension.Equals("xlsx"))
                 {
                     v_ContenType = Constante.CONTENT_TYPE.xls;
                 }
                    sipDetArchivo.vNomAdj = nombreFile;
                    sipDetArchivo.nIdeTipoArchivo = n_IdeTipoArchivo;
                    sipDetArchivo.vContenType = v_ContenType;
                    sipDetArchivo.vDescr = v_Descr;
                    sipDetArchivo.imgAdjunto = GetBytes(file);
                    sipDetArchivo.dtFecReg = DateTime.Now;
                    sipDetArchivo.vFirma = extension;
                    sipDetArchivo.nIdeUsuReg = n_IdeUsuReg;
                    sipDetArchivo.vExtension = extension;
                    sipDetArchivo.nIdePersona = n_IdePersona;
                    sipDetArchivo.dFecIniVig = hoy;
                 return sipDetArchivo;
             }
             return null;
         }


        //ListaSoloArchivosPersona

         public ViewResult ListaSoloArchivosPersona(int nIdePersona)
         {
             FileUploadService fileUploadService = new FileUploadService();
             return View(fileUploadService.ListaSoloArchivosPersonaService(nIdePersona));
         }


    }
}
